package tencent.st3;

import tencent.TreeNode;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;

class Solution {
//给定一棵二叉树，二叉树的每个结点只有0或2个孩子。
//你需要对每个结点赋值一个正整数，使得每个结点的左右子树权值和相等。
//你需要返回所有结点的最小权值和对 10^9+7 取模的结果。
//二叉树结点个数不超过10^5。
    public int maxDepth(TreeNode root) {
        if (root == null) {
            return 0;
        } else {
            int ans = 0;
            Queue<TreeNode> queue = new LinkedList<>();
            queue.offer(root);
            while (!queue.isEmpty()) {
                int size = queue.size();
                while (size > 0) {
                    TreeNode p = queue.poll();
                    if (p.left != null) {
                        queue.offer(p.left);
                    }
                    if (p.right != null) {
                        queue.offer(p.right);
                    }
                    size--;
                }
                ans++;
            }
            return ans;
        }
    }
    public int getTreeSum (TreeNode tree) {
        int depth=maxDepth(tree);
        long result=(long)Math.pow(2,depth)-1;//计算满二叉树的节点数
        if(result>(long)(Math.pow(10,9))+7){
            result=result%(long)(Math.pow(10,9)+7);
        }
        return (int)result;
    }
//    public int getTreeSum (TreeNode tree) {
//        //只能通过11例
//        if (tree.left==null){
//            return 1;
//        }
//        long result=0;
//        int leftnum=getTreeSum(tree.left);
//        int rightnum=getTreeSum(tree.right);
//        if(leftnum>rightnum){
//            result= leftnum*2+1;
//        }else {
//            result= rightnum*2+1;
//        }
//        if(result>(int)(Math.pow(10,9))+7){
//            result=result%(int)(Math.pow(10,9)+7);
//        }
//        return (int)result;
//    }

    public static void main(String[] args) {
        Solution a = new Solution();
        ArrayList<Integer> pre=new ArrayList<>();

        System.out.println(66);
    }
}
